package pe.edu.upc.e41a.javasoft.domain;

import java.util.Date;
import java.util.List;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityManager;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.PersistenceContext;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.validation.constraints.NotNull;
import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.roo.addon.dbre.RooDbManaged;
import org.springframework.roo.addon.javabean.RooJavaBean;
import org.springframework.roo.addon.jpa.activerecord.RooJpaActiveRecord;
import org.springframework.roo.addon.tostring.RooToString;
import org.springframework.transaction.annotation.Transactional;

@Configurable
@Entity
@Table(name = "usuario")
/*
@RooJavaBean
@RooToString
@RooJpaActiveRecord(versionField = "", table = "usuario")
@RooDbManaged(automaticallyDelete = true)
*/
public class Usuario {

	@Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "codigo", columnDefinition = "INT")
    private Integer codigo;

	public Integer getCodigo() {
        return this.codigo;
    }

	public void setCodigo(Integer id) {
        this.codigo = id;
    }

	@OneToMany(mappedBy = "usuario")
    private Set<Aviso> avisoes;

	@OneToMany(mappedBy = "usuario")
    private Set<Publicacion> publicacions;

	@OneToMany(mappedBy = "usuario")
    private Set<Transaccion> transaccions;

	@ManyToOne
    @JoinColumn(name = "tipo_persona", referencedColumnName = "codigo", nullable = false)
    private TipoPersona tipoPersona;

	@ManyToOne
    @JoinColumn(name = "tipo_documento", referencedColumnName = "codigo", nullable = false)
    private TipoDocumento tipoDocumento;

	@Column(name = "nombres", columnDefinition = "VARCHAR", length = 50)
    @NotNull
    private String nombres;

	@Column(name = "apellido_paterno", columnDefinition = "VARCHAR", length = 30)
    @NotNull
    private String apellidoPaterno;

	@Column(name = "apellido_materno", columnDefinition = "VARCHAR", length = 30)
    @NotNull
    private String apellidoMaterno;

	@Column(name = "sexo", columnDefinition = "CHAR")
    @NotNull
    private Character sexo;

	@Column(name = "numero_documento", columnDefinition = "VARCHAR", length = 15)
    @NotNull
    private String numeroDocumento;

	@Column(name = "correo", columnDefinition = "VARCHAR", length = 50)
    @NotNull
    private String correo;

	@Column(name = "telefono", columnDefinition = "VARCHAR", length = 20)
    private String telefono;

	@Column(name = "fecha_nacimiento", columnDefinition = "DATETIME")
    @Temporal(TemporalType.TIMESTAMP)
    @DateTimeFormat(style = "M-")
    private Date fechaNacimiento;

	@Column(name = "usuario", columnDefinition = "VARCHAR", length = 20)
    @NotNull
    private String usuario;

	@Column(name = "clave", columnDefinition = "VARCHAR", length = 20)
    @NotNull
    private String clave;

	public Set<Aviso> getAvisoes() {
        return avisoes;
    }

	public void setAvisoes(Set<Aviso> avisoes) {
        this.avisoes = avisoes;
    }

	public Set<Publicacion> getPublicacions() {
        return publicacions;
    }

	public void setPublicacions(Set<Publicacion> publicacions) {
        this.publicacions = publicacions;
    }

	public Set<Transaccion> getTransaccions() {
        return transaccions;
    }

	public void setTransaccions(Set<Transaccion> transaccions) {
        this.transaccions = transaccions;
    }

	public TipoPersona getTipoPersona() {
        return tipoPersona;
    }

	public void setTipoPersona(TipoPersona tipoPersona) {
        this.tipoPersona = tipoPersona;
    }

	public TipoDocumento getTipoDocumento() {
        return tipoDocumento;
    }

	public void setTipoDocumento(TipoDocumento tipoDocumento) {
        this.tipoDocumento = tipoDocumento;
    }

	public String getNombres() {
        return nombres;
    }

	public void setNombres(String nombres) {
        this.nombres = nombres;
    }

	public String getApellidoPaterno() {
        return apellidoPaterno;
    }

	public void setApellidoPaterno(String apellidoPaterno) {
        this.apellidoPaterno = apellidoPaterno;
    }

	public String getApellidoMaterno() {
        return apellidoMaterno;
    }

	public void setApellidoMaterno(String apellidoMaterno) {
        this.apellidoMaterno = apellidoMaterno;
    }

	public Character getSexo() {
        return sexo;
    }

	public void setSexo(Character sexo) {
        this.sexo = sexo;
    }

	public String getNumeroDocumento() {
        return numeroDocumento;
    }

	public void setNumeroDocumento(String numeroDocumento) {
        this.numeroDocumento = numeroDocumento;
    }

	public String getCorreo() {
        return correo;
    }

	public void setCorreo(String correo) {
        this.correo = correo;
    }

	public String getTelefono() {
        return telefono;
    }

	public void setTelefono(String telefono) {
        this.telefono = telefono;
    }

	public Date getFechaNacimiento() {
        return fechaNacimiento;
    }

	public void setFechaNacimiento(Date fechaNacimiento) {
        this.fechaNacimiento = fechaNacimiento;
    }

	public String getUsuario() {
        return usuario;
    }

	public void setUsuario(String usuario) {
        this.usuario = usuario;
    }

	public String getClave() {
        return clave;
    }

	public void setClave(String clave) {
        this.clave = clave;
    }

	public Usuario() {
		super();
	}

	public Usuario(TipoPersona tipoPersona, TipoDocumento tipoDocumento,
			String nombres, String apellidoPaterno, String apellidoMaterno,
			Character sexo, String numeroDocumento, String correo,
			String telefono, Date fechaNacimiento, String usuario, String clave) {
		super();
		this.tipoPersona = tipoPersona;
		this.tipoDocumento = tipoDocumento;
		this.nombres = nombres;
		this.apellidoPaterno = apellidoPaterno;
		this.apellidoMaterno = apellidoMaterno;
		this.sexo = sexo;
		this.numeroDocumento = numeroDocumento;
		this.correo = correo;
		this.telefono = telefono;
		this.fechaNacimiento = fechaNacimiento;
		this.usuario = usuario;
		this.clave = clave;
	}
	
	
	
	
}
